<?php
require_once('../Series.php');
require_once('../Team.php');
$series_cfg = parse_ini_file('config_ini.php', TRUE);

switch(strtolower($series_cfg['Worker']['game']))
{
   case 'rfactor': require_once('Data Classes/rFactorData.php');
                    break;

   case 'race07': require_once('Data Classes/Race07Data.php');
                    break;

   default: echo 'No valid game name was found.';
            break;
}

/**
 * Funktionen für die Punkteberechnungen etc.
 * Verarbeitet die Daten, die vom "Reader" übergeben werden.
 *
 * @author Timo
 */
class Worker
{

    private $reader  = null;
    private $scoring = array();
    private $series  = null;
    private $drivers = null;
    private $teams   = null;

    function Worker($series, $reader = null)
    {
        SetSeries($series);

        if($reader != null)
        {
            $this->SetReader($reader);
        }

        // Initialisierungen...
        echo 'Initializing scoring system..<br />';
        $this->InitializeScoring();
        echo 'Getting drivers and teams..<br />';
        $this->GetDriversAndTeams();
    }

    public function SetReader($reader)
    {
        if($reader instanceof iReader)
        {
            $this->reader = $reader;
        }
        else
        {
            echo "$reader has to implement the reader interface.";
        }
    }

    public function SetSeries($series)
    {
        if($series instanceof Series)
        {
            $this->series = $series;
        }
        else
        {
            echo "$series is not a valid series.";
        }
    }

/**
 * Man übergibt ein Array mit den Punkten für den jeweiligen Platz.
 * Intern werden dieser dann in einem "Punkte-Array" festgehalten.
 *
 * "Public", da erneutes Aufrufen möglich sein soll, falls etwas nicht geklappt hat.
 *
 * @author Timo
 */
    public function InitializeScoring() // Punkte f. Platz 1 = arr[0], Platz 2 = arr[1], etc..
    {
        foreach($series_cfg['Worker']['scoring'] as $score)
        {
            if(is_integer($score))
            {
                $this->scoring[] = $score;
            }
            else
            {
                echo "Error: \"" . $score . "\" is not an integer and will be set to zero.";
                $this->scoring[] = 0;
            }
        }
    }

/**
 * Holt sich alle Fahrer und Teams aus der Serie.
 *
 * @author Timo
 */
    public function GetDriversAndTeams()
    {
        require_once('../Database/Database.php');

        $db = new Database();
        $db->Connect();

        $driver_db = $this->series->GetShortcut() . '_drivers';
        $team_db   = $this->series->GetShortcut() . '_teams';
        $this->drivers = $db->Select($driver_db);
        $this->teams   = $db->Select($team_db);
        $db->Disconnect();
    }

    public function GetReader()
    {
       return $this->reader;
    }

/**
 * Gibt einem die Punktzahl für Position @pos zurück.
 *
 * @author Timo
 */
    public function GetScoreForPos($pos)
    {
        return $this->scoring[$pos];
    }

/**
 * Das Streichergebnis neuberechnen lassen.
 *
 * @author Timo
 */
    public function CalculateMulligan()
    {
        require_once('../Database/Database.php');

        // TODO: Array mit Punkten pro Rennen holen und niedrigste Punktzahl als Streichergebnis eintragen.
    }
}
?>
